<?xml version="1.0"?>
<ScatterFile xmlns="http://schemas.microsoft.com/netmf/ScatterfileSchema.xsd">
    <!-- STM32F4 with 1024k internal Flash and 128k internal RAM + 64k core-coupled RAM -->

    <Set Name="Valid" Value="false"/>

    <!-- ################################################################################ -->


    <Set Name="RAM_Start"             Value="0x20010000"/>

    <Set Name="Custom_Heap_Begin"     Value="0x20014000"/>
    <Set Name="Custom_Heap_End"       Value="0x20014FF8"/>

    <Set Name="Stack_Bottom"          Value="0x20018000"/>
    <Set Name="Stack_Top"             Value="0x2001BFF8"/>
    <Set Name="Heap_Begin"            Value="0x2001C000"/>
    <Set Name="Heap_End"              Value="0x2001FFF8"/>

	
    <If Name="TARGETLOCATION" Value="FLASH">
        <Set Name="Code_BaseAddress"  Value="0x08000000"/>
        <!--<Set Name="Code_Size"         Value="0x00020000"/>-->
        <!--<Set Name="Code_Size"         Value="0x00010000"/>-->
        <Set Name="Code_Size"         Value="0x00020000"/>
        <!--original value: <Set Name="Code_Size"         Value="0x00010000"/>-->
      
        <Set Name="Valid"             Value="true"/>
    </If>


    <!-- ################################################################################ -->

    <If Name="Valid" Value="false">
        <Error Message="Configuration not recognized"/>
    </If>

    <NamedGroup Name="MEMORY">
      <LoadRegion Name="LR_%TARGETLOCATION%" Base="%Code_BaseAddress%" Size="%Code_Size%"/>
      <LoadRegion Name="HEAP" Base="%Heap_Begin%" Size="%Heap_End - Heap_Begin% + 1"/>
      <LoadRegion Name="STACK" Base="%Stack_Bottom%" Size="%Stack_Top - Stack_Bottom% + 1"/>
	  <!-- I added this -->
      <LoadRegion Name="RELOC_RAM" Base="%RAM_Start%" Size="128K"/>
    </NamedGroup>

    <EntryPoint Name="EntryPoint"/>

    <NamedGroup Name="SECTIONS">

      <ExecRegion Name="ER_%TARGETLOCATION%" Options="&gt;LR_%TARGETLOCATION%">
        <FileMapping Name="*" Options="(i.EntryPoint)" />
        <FileMapping Name="*" Options="(SectionForBootstrapOperations)" />
        <FileMapping Name="*" Options="(.text*)" />
        <FileMapping Name="*" Options="(i.*)" />
        <FileMapping Name="*" Options="(.glue*)" />
        <FileMapping Name="*" Options="(SectionForFlashOperations)" />
        <FileMapping Name="*" Options="(.rodata*)" />
        <FileMapping Name="*" Options="(rodata)" />
        <FileMapping Name="*" Options="(.constdata*)" />
        <FileMapping Name="*" Options="(.conststring*)" />
<!-- this concerns me -->
        <FileMapping Name="*" Options="(SectionForConfig)" />
        <Include File="%SPOCLIENT%\Solutions\STM32Stamp\scatterfile_gcc_missing_symbols.xml"/>
      </ExecRegion>

      <ExecRegion Name="ER_RAM_RO" Align="0x10" Options="&gt;RELOC_RAM AT&gt;LR_%TARGETLOCATION%">
<!--        <FileMapping Name="*" Options="(VectorsTrampolines)" /> -->
            <!-- Flash programming from Flash is safe on STM32 -->
            <!-- No need to place Flash programming code in RAM -->
            <!-- <FileMapping Name="*" Options="(SectionForFlashOperations)" /> -->
      </ExecRegion>

<!--      <ExecRegion Name="ER_RAM_RW" Align="0x10" >
-->
      <ExecRegion Name="ER_RAM_RW" Align="0x10" Options="&gt;RELOC_RAM AT&gt;LR_%TARGETLOCATION%" >
       <FileMapping Name="*" Options="(rwdata)" />        
        <FileMapping Name="*" Options="(.data*)" /> 
        <FileMapping Name="*" Options="(g_PrimaryConfigManager)" />
      </ExecRegion>

<!--      <ExecRegion Name=".bss" Align="0x10" >
-->
      <ExecRegion Name=".bss" Align="0x10" Options="&gt;RELOC_RAM" >
        <FileMapping Name="*" Options="(.zidata*)" /> 
        <FileMapping Name="*" Options="(.bss*)" />
        <FileMapping Name="PROVIDE(__exidx_start = .);" />
        <FileMapping Name="PROVIDE(__exidx_end = .);" />
      </ExecRegion>

      <ExecRegion Name="/DISCARD/">
        <FileMapping Name="*" Options="(.ARM.exidx*)" />
        <FileMapping Name="*" Options="(.ARM.extab*)" />
      </ExecRegion>

      <ExecRegion Name="ER_CUSTOM_HEAP_BEGIN" Base="%Custom_Heap_Begin%">
        <FileMapping Name="*" Options="(SectionForCustomHeapBegin)" />
      </ExecRegion>
      <ExecRegion Name="ER_CUSTOM_HEAP_END" Base="%Custom_Heap_End%">
        <FileMapping Name="*" Options="(SectionForCustomHeapEnd)" />
      </ExecRegion>
      <!-- this must go last here to provide a low water mark on the stack -->
      <ExecRegion Name="ER_STACK_BOTTOM" Base="%Stack_Bottom%">
        <FileMapping Name="*" Options="(SectionForStackBottom)" />
      </ExecRegion>
      <ExecRegion Name="ER_STACK_TOP" Base="%Stack_Top%">
        <FileMapping Name="*" Options="(SectionForStackTop)" />
      </ExecRegion>
      <ExecRegion Name="ER_HEAP_BEGIN" Base="%Heap_Begin%">
        <FileMapping Name="*" Options="(SectionForHeapBegin)" />
      </ExecRegion>
      <ExecRegion Name="ER_HEAP_END" Base="%Heap_End%">
        <FileMapping Name="*" Options="(SectionForHeapEnd)" />
      </ExecRegion>
      <!-- everything between heapbegin and heapend will be allocated for the unmanaged SimpleHeap -->

    </NamedGroup>

    <!-- The following variables are used to simulate the ones autogenerated by RVDS -->
    <GlobalVariable Name="Load$$ER_%TARGETLOCATION%$$Base"          Value="ADDR(ER_%TARGETLOCATION%)"/>
    <GlobalVariable Name="Image$$ER_%TARGETLOCATION%$$Length"       Value="SIZEOF(ER_%TARGETLOCATION%)"/>

    <GlobalVariable Name="Image$$ER_RAM_RO$$Base"                   Value="ADDR(ER_RAM_RO)"/>
    <GlobalVariable Name="Image$$ER_RAM_RO$$Length"                 Value="SIZEOF(ER_RAM_RO)"/>
    <GlobalVariable Name="Load$$ER_RAM_RO$$Base"                    Value="LOADADDR(ER_RAM_RO)"/>

    <GlobalVariable Name="Image$$ER_RAM_RW$$Base"                   Value="ADDR(ER_RAM_RW)"/>
    <GlobalVariable Name="Image$$ER_RAM_RW$$Length"                 Value="SIZEOF(ER_RAM_RW)"/>
    <GlobalVariable Name="Load$$ER_RAM_RW$$Base"                    Value="LOADADDR(ER_RAM_RW)"/>

    <GlobalVariable Name="Image$$ER_RAM_RW$$ZI$$Base"               Value="ADDR(.bss)"/>
    <GlobalVariable Name="Image$$ER_RAM_RW$$ZI$$Length"             Value="SIZEOF(.bss)"/>
    <GlobalVariable Name="__use_no_semihosting_swi"                 Value="0"/>

</ScatterFile>
